package com.hoshiicloud.user.service.rbac;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hoshiicloud.UsersLoginVO;
import com.hoshiicloud.auth.vo.TokenUsersVO;
import com.hoshiicloud.common.aop.Logable;
import com.hoshiicloud.common.rpc.Response;
import com.hoshiicloud.rbac.dto.UserPermissionDTO;
import com.hoshiicloud.rbac.entity.SysUsers;
import com.hoshiicloud.rbac.vo.SysUsersVO;
import com.hoshiicloud.user.entity.platform.PlatUsers;
import com.hoshiicloud.user.param.rbac.SysUsersQueryParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author Mr.Wu
 * @since 2019-04-18
 */
public interface ISysUsersService extends IService<SysUsers> {

    @Logable(authName = "权限相关-用户信息管理-根据参数查询用户信息")
    Response<SysUsers> getSysUserByParam(QueryWrapper queryWrapper);

    /**
	 * @Description: 新增系统用户
	 * @author Mr.wu
	 * @param param
	 * @return
	 * @date: 2019年4月22日 下午2:16:16
	 */
	public Response addSysUser(SysUsers param,List<String> roleIdList);

	/**
	 *
	 * @Description: 根据ID修改系统用户
	 * @author Mr.wu
	 * @param param
	 * @return
	 * @date: 2019年4月22日 下午2:17:46
	 */
	public Response updateSysUser(SysUsers param,List<String> roleIdList);

	/**
	 *
	 * @Description: 根据ID删除系统用户
	 * @author Mr.wu
	 * @param id
	 * @return
	 * @date: 2019年4月22日 下午2:18:12
	 */
	public Response deleteSysUser(Long id);

	/**
	 *
	 * @Description: 根据ID获取系统用户详情
	 * @author Mr.wu
	 * @param id
	 * @return
	 * @date: 2019年4月22日 下午2:18:44
	 */
	public Response getSysUserDetail(Long id);

	/**
	 *
	 * @Description: 根据ID获取用户所拥有的权限值列表
	 * @author Mr.wu
	 * @param id
	 * @return
	 * @date: 2019年4月22日 下午2:19:03
	 */
	public Response<UserPermissionDTO> getSysUserPermissionList(Long id);

	/**
	 *
	 * @Description: 根据参数获取系统用户列表
	 * @author Mr.wu
	 * @return
	 * @date: 2019年4月22日 下午2:19:13
	 */
	public Response getSysUserList(QueryWrapper<SysUsers> queryWrapper);

	/**
	 *
	 * @Description: 分页查询系统用户列表
	 * @author Mr.wu
	 * @param page
	 * @param queryWrapper
	 * @return Response<IPage<SysUsers>>
	 * @date: 2019年4月28日 上午9:18:49
	 */
	Response getPage(IPage<SysUsers> page, QueryWrapper<SysUsers> queryWrapper,String key);

	TokenUsersVO getLoginDetail(String username);
	/**
	 *
	 * @Description: SAAS系统分页查询所有员工列表
	 * @author rogercj
	 * @param page
	 * @param sysUsersQueryParam
	 * @return Response<IPage<SysUsers>>
	 */

	public IPage<SysUsersVO> getAllEmployee(IPage<SysUsers> page, SysUsersQueryParam sysUsersQueryParam);

	/**
	 *
	 * @Description: SAAS系统根据部门ID分页查询(包括子部门)员工列表
	 * @author rogercj
	 * @param page
	 * @param sysUsersQueryParam
	 * @return Response<IPage<SysUsers>>
	 * @date: 2019年8月8日 下午5:30:49
	 */
	public IPage<SysUsersVO> getPageByDeptId(IPage<SysUsers> page, SysUsersQueryParam sysUsersQueryParam);

	/**
	 * SAAS系统根据角色名称分页查询员工列表
	 * @param page
	 * @param sysUsersQueryParam
	 * @return
	 */
	public IPage<SysUsersVO> getPageByRoleName(IPage<SysUsers> page, @Param("param") SysUsersQueryParam sysUsersQueryParam);


}
